const fs = require('fs');
const { PDFDocument } = require('pdf-lib');
const { createCanvas, loadImage } = require('canvas');

async function pdfToImg(pdfPath, outputDir) {
  // 加载PDF文件
  const pdfBytes = fs.readFileSync(pdfPath);
  const pdfDoc = await PDFDocument.load(pdfBytes);

  // 获取PDF的页数
  const numPages = pdfDoc.getPageCount();

  // 遍历每一页并将其转换为图像
  for (let i = 0; i < numPages; i++) {
    const page = pdfDoc.getPage(i);
    const width = page.getWidth();
    const height = page.getHeight();

    // 创建一个canvas并设置其尺寸
    const canvas = createCanvas(width, height);
    const ctx = canvas.getContext('2d');

    // 将PDF页面渲染到canvas上
    const renderContext = {
      viewport: { width, height },
      xOffset: 0,
      yOffset: 0,
      renderIntent: 'default', // 可以更改为 'print'、'screen'、'editable'、'export'等选项
      colorSpaceConversion: 'none', // 可以更改为 'default'、'deviceGray'、'deviceRGB'、'pattern'等选项
      dpi: 300, // 可以更改为所需的DPI值
      scale: 1, // 可以更改为所需的缩放比例
      layoutStrategy: 'single-page', // 可以更改为 'one-page'、'two-page'、'auto-side-by-side'等选项
      maxRenderDuration: null, // 可以更改为所需的最大渲染时间(毫秒)
      debugUI: false, // 可以更改为所需的调试UI开关状态
      imageResourcesPath: '', // 可以更改为所需的图像资源路径
      decodeParameters: {}, // 可以更改为所需的解码参数对象(例如用于处理透明度的参数)
      disableExternalLinking: false, // 可以更改为所需的禁用外部链接开关状态
      objsEnabled: true, // 可以更改为所需的对象启用开关状态
      utilitiesOptions: {}, // 可以更改为所需的实用程序选项对象(例如用于处理文本提取的选项)
      annotationRenderingMode: 'internal', // 可以更改为所需的注释渲染模式(例如 'internal'、'external')
      fontCache: new Map(), // 可以更改为所需的字体缓存对象(例如用于处理字体的缓存)
      inlineFontsUsageEnabled: false, // 可以更改为所需的内联字体使用启用开关状态
      apiVersion: '1.5', // 可以更改为所需的API版本字符串(例如 '1.3'、'1.5')
    };
    console.log("page", page);
    await page.doc.render(renderContext).promise;

    // 将canvas保存为图像文件
    const imgBuffer = canvas.toBuffer('image/png');
    fs.writeFileSync(`${outputDir}/page_${i + 1}.png`, imgBuffer);
  }
}
// 会报错，不知道哪里有问题
// 使用示例：将PDF转换为图像并保存到指定目录
pdfToImg('./PDFS/[Beautyleg]美腿寫真 2024.01.09 No.2353 Joyce.pdf', './images');
